Amazon CloudFrontへのアクセスをAWS WAFでRefererによって制御してみた
Amazon CloudFrontへのアクセスをAWS WAFでRefererによって制御してみましたのでご紹介します。
概要
- Amazon CloudFront(img.example.com)へ直接アクセスはできない。
- 特定のドメイン (www.example.com) からのみアクセス可能。
- AWS WAFでRefererによって制御する。
設定方法
マネジメントコンソールで設定していきます。
Web ACLを作成する
Create web ACL をクリックして web ACL を作成します。
Step 1: Name web ACL
- Web ACL name* : Web ACL の名前を入力
- CloudWatch metric name* : 自動でCloudWatch metric名が入ります。
- Region* : Global (CloudFront)
- AWS resource to associate : ディストリビューションを選択
Next をクリック
Step 2: Create conditions
コンディションの作成をします。
String and regex match conditions の Create condition をクリックします。
- Name* : Condition の名前を入力
- Region* : Global (CloudFront)
- Type* : String match
- Part of the request to filter on :
- Header* :
- Match type :
- Transformation :
- Value to match* : www.example.com/
Add filter をクリック create をクリック Next をクリック
Step 3: Create rules
Create rule をクリックしてルールを作成します。
- Name* : ruleの名前を入力
- CloudWatch metric name* : 自動でCloudWatch metric名が入ります。
- Rule type* : Regular rule
- Region* : Global (CloudFront)
-
Add conditions
- match at least one of the filters in the string match condition を選択
- 先ほど作成した condition を選択
create をクリック
- 作成したルールにマッチしたら許可
- ルールにマッチしない場合は拒否
Step 4: Review and create
設定を確認し Confirm and create をクリック
設定が完了したのでアクセス制御ができているか確認します。
確認
curlで確認
- www.example.com から img.example.com へアクセス
$ curl -H "Referer: http://www.example.com/" -I https://img.example.com/test.png HTTP/2 200 content-type: image/png content-length: 2602312 date: Sun, 13 May 2018 21:12:22 GMT last-modified: Sun, 13 May 2018 18:56:58 GMT etag: "80ff7e4b9e06df9c7d5348e484a4cc18" accept-ranges: bytes server: AmazonS3 x-cache: RefreshHit from cloudfront via: 1.1 3a89ec81413ada8ae1c2005b5973a09f.cloudfront.net (CloudFront) x-amz-cf-id: XxY0kwOvgHnbNfkgyhJNUgBD52WxQfFYGlFttnNtfLWOyRX69kk1rw==
- 直接 img.example.com へアクセス
$ curl -I https://img.example.com/test.png HTTP/2 403 server: CloudFront date: Sun, 13 May 2018 21:16:14 GMT content-type: text/html content-length: 560 x-cache: Error from cloudfront via: 1.1 e785d36fcfe1e6758d8c1a9a71445bbe.cloudfront.net (CloudFront) x-amz-cf-id: vfWfWnExOATanVeyHuHTH48TtdAd8Nf0zE1heytn1m2JaucG10T2rg==
- Refererが違う場合(example.com)から img.example.com へアクセス
$ curl -H "Referer: http://example.com/" -I https://img.example.com/test.png HTTP/2 403 server: CloudFront date: Sun, 13 May 2018 21:17:40 GMT content-type: text/html content-length: 560 x-cache: Error from cloudfront via: 1.1 8616cfe905870ff4c06a2b1da3b52a99.cloudfront.net (CloudFront) x-amz-cf-id: zo88rR56KCHn_4in5w74GD-FcNWu6QqA0x6Au8w_I125fpkjIB2SdA==
AWS WAFによりアクセスが制限できたことが確認できました。
まとめ
今回はAWS WAFの String and regex match conditions で Referer によってAmazon CloudFrontへのアクセスを制御しました。